package br.com.esporte.model;

import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 * @author Milton Domingues
 */
@Entity
@Table(name = "grupo")
public class Grupo extends EntidadeEsporte {

	private static final long serialVersionUID = 5956030409917985700L;

	@Enumerated(EnumType.ORDINAL)
	private StatusGrupoEnum statusGrupo;

	@Enumerated(EnumType.ORDINAL)
	private StatusLotacaoEnum statusLotacao;

	@Basic
	@Column(length = 100)
	private String nome;

	@Basic
	private Boolean atletaFora;

	@Basic
	@Column(length = 500)
	private String descricao;

	@Enumerated(EnumType.ORDINAL)
	private TipoEsporteEnum tipo;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "presidente_id")
	private Usuario presidente;

	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name="grupo_moderador", joinColumns = @JoinColumn(name="grupo_id"), inverseJoinColumns = @JoinColumn(name="moderador_id"))
	private List<Usuario> moderadores;

	public Grupo() {
		setStatusGrupo(StatusGrupoEnum.SIM_FORA);
		setStatusLotacao(StatusLotacaoEnum.PRECISA_JOGADOR);
	}

	public Boolean getAtletaFora() {
		return atletaFora;
	}

	public String getDescricao() {
		return descricao;
	}

	public List<Usuario> getModeradores() {
		return moderadores;
	}

	public String getNome() {
		return nome;
	}

	public Usuario getPresidente() {
		return presidente;
	}

	public StatusGrupoEnum getStatusGrupo() {
		return statusGrupo;
	}

	public StatusLotacaoEnum getStatusLotacao() {
		return statusLotacao;
	}

	public TipoEsporteEnum getTipo(){
		return tipo;
	}

	public void setAtletaFora(Boolean atletaFora) {
		this.atletaFora = atletaFora;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public void setModeradores(List<Usuario> moderadores) {
		this.moderadores = moderadores;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public void setPresidente(Usuario presidente) {
		this.presidente = presidente;
	}

	public void setStatusGrupo(StatusGrupoEnum statusGrupo) {
		this.statusGrupo = statusGrupo;
	}

	public void setStatusLotacao(StatusLotacaoEnum statusLotacao) {
		this.statusLotacao = statusLotacao;
	}

	public void setTipo(TipoEsporteEnum tipo) {
		this.tipo = tipo;
	}

}
